﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Citas.Negocio;
using Citas.Dominio;

namespace Citas.Controllers
{
    public class PacienteController : Controller
    {

        IAdministracionService adminService = null;
        //
        // GET: /Paciente/

        public ActionResult Index()
        {

            TempData["TipoDocumento"] = ListarTipos();


            return View(adminService.ListarPaciente());

        }

        public ActionResult Buscar(String documento)
        {
            ICollection<Paciente> modelo = adminService.ListarPacienteXDocumento(documento);
            return View("Index", modelo);
        }

        public ActionResult BuscarXNombre(String nombre)
        {
            ICollection<Paciente> modelo = adminService.ListarPacienteXNombre(nombre);
            return View("Index", modelo);
        }

        public ActionResult Create()
        {

            TempData["TipoDocumento"] = ListarTipos();

            return View();
        }

        // POST: /Paciente/Create
        [HttpPost]
        public ActionResult Create(FormCollection collection)
        {
            try
            {
                string tipo = (String)collection["TipoDocumento"];
                string numeroDocumento = (String)collection["NumeroDocumento"];
                string apellidoPaterno = (String)collection["ApellidoPaterno"];
                string apellidoMaterno = (String)collection["ApellidoMaterno"];
                string nombres = (String)collection["Nombres"];
                string codigoSeguro = (String)collection["CodigoSeguro"];

                Paciente r = adminService.RegistrarPaciente(tipo, numeroDocumento, apellidoPaterno, apellidoMaterno, nombres, codigoSeguro);
               
                TempData["TipoDocumento"] = ListarTipos();

                return RedirectToAction("Index");
            }
            catch (Exception ex)
            {
                ModelState.AddModelError(string.Empty, ex.Message);
                    TempData["TipoDocumento"] = ListarTipos();
                return View("Create");
            }
        }

        // GET: /Paciente/Delete/5


        public ActionResult Delete(int id)
        {
            return View(adminService.ObtenerPaciente(id));
        }

        [HttpPost]
        public ActionResult Delete(int id, FormCollection collection)
        {
            try
            {
                // TODO: Add delete logic here
                Paciente pacienteAEliminar = adminService.ObtenerPaciente(id);
                adminService.EliminarPaciente(pacienteAEliminar.Codigo);
                TempData["mensaje"] = "Paciente" + pacienteAEliminar.Codigo + " eliminado exitosamente";
                return RedirectToAction("Index"); // Todo bien, a la lista
            }
            catch
            {
                return View();
            }
        }

        //
        // GET: /Paciente/Edit/5

        public ActionResult Edit(int id)
        {
            TempData["TipoDocumento"] = ListarTipos();

            return View(adminService.ObtenerPaciente(id));
        }

        //
        // POST: /Paciente/Edit/5

        [HttpPost]
        public ActionResult Edit(int id, FormCollection collection)
        {
            try
            {
                string tipo = (String)collection["TipoDocumento"];
                string numeroDocumento = (String)collection["NumeroDocumento"];
                string apellidoPaterno = (String)collection["ApellidoPaterno"];
                string apellidoMaterno = (String)collection["ApellidoMaterno"];
                string nombres = (String)collection["Nombres"];
                string codigoSeguro = (String)collection["CodigoSeguro"];

                Paciente r = adminService.ModificarPaciente(adminService.ObtenerPaciente(id).Codigo, tipo, numeroDocumento, apellidoPaterno, apellidoPaterno, nombres, codigoSeguro);

                TempData["TipoDocumento"] = ListarTipos();

                return RedirectToAction("Index");
            }
            catch (Exception ex)
            {
                ModelState.AddModelError(string.Empty, ex.Message);
                TempData["TipoDocumento"] = ListarTipos();
                return View("Edit");
            }
        }


        private ICollection<SelectListItem> ListarTipos()
        {
            ICollection<SelectListItem> tipos = new List<SelectListItem>();
            tipos.Add(new SelectListItem() { Value = string.Empty, Text = "::. Seleccione .::" });
            tipos.Add(new SelectListItem() { Value = "DNI", Text = "DNI" });
            tipos.Add(new SelectListItem() { Value = "PSP", Text = "PSP" });
            tipos.Add(new SelectListItem() { Value = "LME", Text = "LME" });
           

            return tipos;
        }

    }
}
